package com.cty._05_Ability._57_02_ContinuousSequenceWithSum;

/**
 * @Auther: cty
 * @Date: 2020/7/23 10:18
 * @Description: 面试题57（二）：为s的连续正数序列
 * 题目：输入一个正数s，打印出所有和为s的连续正数序列（至少含有两个数）。
 * 例如输入15，由于1+2+3+4+5=4+5+6=7+8=15，所以结果打印出3个连续序列1～5、
 * 4～6和7～8。
 * @version: 1.0
 */
public class ContinuousSequenceWithSum {

    public static void continuousSequenceWithSum(int sum){
        if(sum < 3)
            return;

        int lowerPtr = 1;
        int upperPtr = 2;
        int curSum = lowerPtr + upperPtr;
        int median = (1+sum)/2;
        while(lowerPtr < median){
            if(curSum == sum) {
                printContinuousSequence(lowerPtr, upperPtr);
                upperPtr++;
                curSum += upperPtr;
            }else if(curSum < sum){
                upperPtr++;
                curSum += upperPtr;
            }else {
                curSum -= lowerPtr;
                lowerPtr++;
            }  // end else
        }  // end while
    }  // end continuousSequenceWithSum()

    private static void printContinuousSequence(int lowerPtr, int upperPtr){
        for(int i=lowerPtr; i<=upperPtr; i++)
            System.out.print(i + " ");
        System.out.println();
    }

}  // end class
